package compilador;

/**
 * 
 * @author Juan Luis Martinez
 * 
 */
public class Token {

	// ----------BEGIN Las distintas categorias-------------------------------
	public static final int NULO = -1;
	public static final int ID = 255;
	public static final int ENTERO = 256;
	public static final int BOOLEANO = 257;
	public static final int TIPO = 258;
	public static final int SUMA = 259;
	public static final int RESTA = 260;
	public static final int MUL = 261;
	public static final int DIV = 262;
	public static final int MOD = 263;
	public static final int IGUAL = 264;
	public static final int DISTINTO = 265;
	public static final int MAYORQUE = 266;
	public static final int MAYORIGUALQUE = 267;
	public static final int MENORQUE = 268;
	public static final int MENORIGUALQUE = 269;
	public static final int NEGACION = 270;
	public static final int AND = 271;
	public static final int OR = 272;
	public static final int PABRE = 273;
	public static final int PCIERRA = 274;
	public static final int COMA = 275;
	public static final int PUNTOYCOMA = 276;
	public static final int ASIGNACION = 277;
	public static final int ASIGNATIPO = 278;
	public static final int RES_INICIO = 279;
	public static final int RES_FIN = 280;
	public static final int RES_ENTERO = 281;
	public static final int RES_BOOLEANO = 282;
	public static final int RES_IF = 283;
	public static final int RES_THEN = 284;
	public static final int RES_ELSE = 285;
	public static final int RES_WHILE = 286;
	public static final int RES_DO = 287;
	public static final int RES_TYPE = 288;
	public static final int RES_NEW = 289;
	public static final int PUNTERO = 290;
	public static final int REGISTRO = 291;
	public static final int PUNTO = 292;
	public static final int PROC = 293;
	
	// ----------FIN Las distintas categorias-------------------------------

	/**
	 * Posible lexema contenido en el token
	 */
	private String lex;

	/**
	 * Linea del programa fuente en la que se encuentra el token
	 */
	private int linea;

	/**
	 * La categoria sintactica a la que pertenece este token
	 */
	private int categoriaSintactica;

	/**
	 * Contructora por defecto de Token
	 * @param categoria Categoria sintactica a la que pertenece
	 * @param le Lexema contenido en el Token
	 * @param lin Linea del programa fuente en la que se encuentra
	 */
	public Token(int categoria, String le, int lin) {
		categoriaSintactica = categoria;
		lex = le;
		linea = lin;
	}

	/**
	 * Crea una nueva instancia de Token inicializando su categoria sintactica
	 * @param valor Categoria sintactica
	 */
	public Token(int valor) {
		this.categoriaSintactica = valor;
	}

	/**
	 * Consulta la categoria sintactica
	 * @return La categoria sintactica a la que pertenece
	 */
	public int getCategoriaSintactica() {
		return categoriaSintactica;
	}

	/**
	 * Modifica la categoria sintactica
	 * @param valor Nueva categoria sintactica
	 */
	public void setCategoriaSintactica(int valor) {
		this.categoriaSintactica = valor;
	}

	/**
	 * Consulta el lexema
	 * @return El posible lexema contenido en el token
	 */
	public String getLex() {
		return lex;
	}

	/**
	 * Modifica el lexema
	 * @param lex Nuevo lexema
	 */
	public void setLex(String lex) {
		this.lex = lex;
	}

	/**
	 * Consulta la linea del Token en el programa fuente
	 * @return Linea del programa fuente en la que se encuentra el token
	 */
	public int getLinea() {
		return linea;
	}

	/**
	 * Modifica la linea del Token en el programa fuente
	 * @param linea Nueva linea
	 */
	public void setLinea(int linea) {
		this.linea = linea;
	}

}
